package cn.oinch.bangbang.config.interceptor;

import com.alibaba.fastjson.JSON;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeUnit;

/**
 * 判断用户登录信息，注入user到请求上下文
 *
 * @author sunHaoMing
 */

@SuppressWarnings({"SpringJavaAutowiredFieldsWarningInspection"})
@Component
public class UserHandlerInterceptor implements HandlerInterceptor {
    private static final Logger logger = LogManager.getLogger(UserHandlerInterceptor.class);
    private static final String UNKNOWN = "unknown";
//    @Autowired
//    private IUserService userService;
//
//    @SuppressWarnings("Duplicates")
//    @Override
//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
//        String uid = request.getParameter("uid");
//        RequestContent content = new RequestContent();
//        StringBuffer url = request.getRequestURL();
//        if (StringUtils.isNotBlank(uid)) {
//            String json = (String) userService.getObjectFromRedis(uid);
//            UserVo userVo = userService.getUserVo(uid, json);
//            if (!ObjectUtils.isEmpty(userVo) && StringUtils.isNotBlank(userVo.getWxOpenid())) {
//                content.setUser(userVo);
//                content.setUuid(uid);
//                content.setUserIp(getClientIp(request));
//                RequestHolder.add(content);
//                userService.setObjectValueToRedis(uid, JSON.toJSONString(userVo), 7 * DateUtil.DAY, TimeUnit.MILLISECONDS);
//                return true;
//            }
//        } else {
//            logger.error("url:" + url + " uuid is null!");
//        }
//        response.setCharacterEncoding(StandardCharsets.UTF_8.name());
//        response.setContentType("application/json; charset=utf-8");
//        response.getWriter().append(JSON.toJSONString(ResponseResult.NOT_LOGIN));
//        return false;
//    }
//
//    @SuppressWarnings("SpellCheckingInspection")
//    private String getClientIp(HttpServletRequest request) {
//        String ip = null;
//
//        //X-Forwarded-For：Squid 服务代理
//        String ipAddresses = request.getHeader("X-Forwarded-For");
//
//
//        if (ipAddresses == null || ipAddresses.length() == 0 || UNKNOWN.equalsIgnoreCase(ipAddresses)) {
//            //Proxy-Client-IP：apache 服务代理
//            ipAddresses = request.getHeader("Proxy-Client-IP");
//        }
//
//        if (ipAddresses == null || ipAddresses.length() == 0 || UNKNOWN.equalsIgnoreCase(ipAddresses)) {
//            //WL-Proxy-Client-IP：webLogic 服务代理
//            ipAddresses = request.getHeader("WL-Proxy-Client-IP");
//        }
//
//        if (ipAddresses == null || ipAddresses.length() == 0 || UNKNOWN.equalsIgnoreCase(ipAddresses)) {
//            //HTTP_CLIENT_IP：有些代理服务器
//            ipAddresses = request.getHeader("HTTP_CLIENT_IP");
//        }
//
//        if (ipAddresses == null || ipAddresses.length() == 0 || UNKNOWN.equalsIgnoreCase(ipAddresses)) {
//            //X-Real-IP：nginx服务代理
//            ipAddresses = request.getHeader("X-Real-IP");
//        }
//
//        //有些网络通过多层代理，那么获取到的ip就会有多个，一般都是通过逗号（,）分割开来，并且第一个ip为客户端的真实IP
//        if (ipAddresses != null && ipAddresses.length() != 0) {
//            ip = ipAddresses.split(",")[0];
//        }
//
//        //还是不能获取到，最后再通过request.getRemoteAddr();获取
//        if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ipAddresses)) {
//            ip = request.getRemoteAddr();
//        }
//        return ip;
//    }
}

